home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Taifun
/
Taifun 032 (1987-11-15)(Ossowski, Stefan)(DE)(PD).zip
/
Taifun 032 (1987-11-15)(Ossowski, Stefan)(DE)(PD).adf
/
Koch-Hilbert-Kurven
< prev
next >
Wrap
Text File
|
1989-01-18
|
7KB
|
273 lines
' **************************************************************
' **************** Koch/Hilbert Kurven ***************
' ************** ----------------------- *************
' ************ fÜr den AMIGA erweitert 1987 von ***********
' ************* Andreas Werner ************
' ************** Blumenstr.13 / 7ooo Stuttgart-1 *************
' **************************************************************
'Public Domain zusammen mit 'KH-Dok.'
'SPRACHE : AMIGA BASIC
start:
SCREEN 2,640,200,1,2:WINDOW 3,,,16,2
clrscrn:
CLEAR ,,4789
WINDOW 2,"********************** Koch / Hilbert - Kurven ***********************",,0,2
PALETTE 0,0,0,0:PALETTE 1,.75,.75,.75: COLOR 0,1
FOR f=0 TO 8:READ m$(f):NEXT f
DATA " Dreieck"," Quadrat"," FÜnfeck"," Sechseck"
DATA "Siebeneck"," Achteck"," Hilbert"," Ansehen","Speichern"
pi=3.14159256#:DEFSNG a,d
WINDOW 2:CLS
FOR f=3 TO 11
LOCATE (f-1)*2,14:PRINT m$(f-3): REM Menue
NEXT f
LINE(374,149)-(476,161),0,b:LINE(371,147)-(479,163),0,b
LOCATE 20,52:PRINT "QUIT"
LINE(56,15)-(223,165),0,b:LINE(59,17)-(220,163),0,b
maus:
GOSUB click
x=MOUSE(1):y=MOUSE(2)
FOR a=3 TO 11
IF y>20+(a-3)*16 AND y<35+(a-3)*16 THEN mark: REM Mausauswahl
NEXT a
a$=INKEY$:IF a$="q" OR a$="a" THEN mark: REM Tastaturauswahl
a=VAL(a$):IF a<3 OR a>11 THEN maus
mark:
IF a=10 OR a$="a" THEN
WINDOW 3: REM Ansehen
GOSUB click:GOTO clrscrn
END IF
IF a=11 AND x>280 OR a$="q" THEN
LOCATE 10,45:PRINT "Moment bitte ... ":LIST: REM Quit
WINDOW CLOSE 2: END
END IF
IF a=11 AND x<280 OR a$="s" THEN iffsave
GOSUB dimension
LINE(65,a+(a-2)*15+3)-(214,a+(a-2)*15+15),0,b
LINE(62,a+(a-2)*15+1)-(217,a+(a-2)*15+17),0,b
GOSUB xitin: REM Iterat. wählen
WINDOW 3:COLOR 0,1:CLS
IF a=9 THEN hilbert
CLS:MOUSE ON:ON MOUSE GOSUB stoppen
d=0
nextit:
it=xit(d):se=600:xp=15:yp=166:w=0
IF a=5 THEN se=se/1.08:xp=28:yp=178: REM GrÖße einstellen...
IF a=6 THEN se=se/1.57:xp=126
IF a=7 THEN se=se/1.85:xp=144:yp=162
IF a=8 THEN se=se/2.38:xp=172:yp=154
GOSUB koch: REM und rechnen
d=d+1:IF d<eit THEN nextit
scan:
a$=INKEY$:IF a$<>"" THEN clrscrn
GOSUB click:GOTO clrscrn
koch:
IF it=0 THEN
s=se:GOSUB schreite:RETURN
END IF
it=it-1:se=se/3: GOSUB koch
a1=a-2:ON a1 GOSUB kochd,kochq,kochf,kochs,kochsi,kocha
it=it+1:se=se*3
RETURN
kochd:
w=w-60: GOSUB koch
w=w+120:GOSUB koch
w=w-60: GOSUB koch
RETURN
kochq:
w=w-90:GOSUB koch
w=w+90:GOSUB koch
w=w+90:GOSUB koch
w=w-90:GOSUB koch
RETURN
kochf:
w=w-(180-(360/5)):GOSUB koch
w=w+360/5:GOSUB koch
w=w+360/5:GOSUB koch
w=w+360/5:GOSUB koch
w=w-(180-(360/5)):GOSUB koch
RETURN
kochs:
w=w-120:GOSUB koch
w=w+60 :GOSUB koch
w=w+60 :GOSUB koch
w=w+60 :GOSUB koch
w=w+60 :GOSUB koch
w=w-120:GOSUB koch
RETURN
kochsi:
w=w-(180-(360/7)):GOSUB koch
w=w+360/7:GOSUB koch
w=w+360/7:GOSUB koch
w=w+360/7:GOSUB koch
w=w+360/7:GOSUB koch
w=w+360/7:GOSUB koch
w=w-(180-(360/7)):GOSUB koch
RETURN
kocha:
w=w-(180-(360/8)):GOSUB koch
w=w+360/8:GOSUB koch
w=w+360/8:GOSUB koch
w=w+360/8:GOSUB koch
w=w+360/8:GOSUB koch
w=w+360/8:GOSUB koch
w=w+360/8:GOSUB koch
w=w-(180-(360/8)):GOSUB koch
RETURN
hilbert:
MOUSE ON:ON MOUSE GOSUB stoppen
CLS:d=0
hil1:
it=xit(d)+1:sp=95/2^(it):se=95/2^(it-1):xp=126+sp:yp=192-sp:w=0:r=1
se=se*2
GOSUB hilbi
d=d+1:IF d<eit THEN hil1
GOTO scan
hilbi:
IF it=0 THEN RETURN
w=w-90*r
it=it-1:r=-r:GOSUB hilbi:r=-r
s=se:GOSUB schreite
w=w+90*r:GOSUB hilbi
s=se:GOSUB schreite:GOSUB hilbi
w=w+90*r
s=se:GOSUB schreite
r=-r:GOSUB hilbi:r=-r:it=it+1
w=w-90*r
RETURN
schreite:
xs=s*COS(w*pi/180)
ys=s/2*SIN(w*pi/180)
xp=xp+xs:yp=yp+ys
LINE (xp-xs,yp-ys)-(xp,yp),0
RETURN
xitin:
LOCATE 11,46:PRINT "Iterationen ?"
LINE(297,73)-(532,126),0,b:LINE(300,75)-(529,124),0,b
FOR xb=304 TO 472 STEP 56
LINE(xb,92)-(xb+53,106),0,b:LINE(xb,108)-(xb+53,122),0,b
LOCATE 13,(xb/8)+3:PRINT (xb-304)/56
LOCATE 15,(xb/8)+3:PRINT (xb-304)/56+4
IF a<9 THEN
LOCATE 15,56:PRINT " ":LOCATE 15,63:PRINT " "
END IF
NEXT xb
GOSUB okgadget:eit=0
mausin:
GOSUB click:x=MOUSE(1):y=MOUSE(2)
IF y>92 AND y<106 THEN
FOR i=1 TO 4
IF x>304+56*(i-1) AND x<302+56*i THEN
LINE(307+56*(i-1),94)-(298+56*i,104),0,b
xit(eit)=i-1
END IF
NEXT i
END IF
IF y>108 AND y<124 THEN
FOR i=5 TO 8
IF x>304+56*(i-5) AND x<302+56*(i-4) THEN
IF a<9 AND i>6 THEN mausin
LINE(307+56*(i-5),110)-(298+56*(i-4),120),0,b
xit(eit)=i-1
END IF
NEXT i
END IF
IF y>149 AND y<161 THEN
IF x>303 AND x<368 THEN clrscrn: REM cancel
IF x>482 AND x<526 THEN RETURN: REM ok
END IF
IF a<9 AND eit>6 OR a=9 AND eit>8 THEN mausin
eit=eit+1:GOTO mausin
okgadget:
LINE(297,145)-(532,165),0,b:LINE(300,147)-(529,163),0,b
LINE(303,149)-(368,161),0,b:LOCATE 20,40:PRINT "CANCEL"
LOCATE 20,51:PRINT " "
LINE(482,149)-(526,161),0,b:LOCATE 20,63:PRINT "OK"
RETURN
dimension:
di=LOG(a+1)/LOG(3!)
LINE(297,15)-(532,40),0,b
LINE(300,17)-(529,38),0,b
LINE(303,19)-(526,36),0,b
LOCATE 4,42:PRINT "Dimension : ";di
RETURN
stoppen:
MOUSE OFF
RETURN clrscrn
click:
z=MOUSE(0):WHILE MOUSE(0)=0:WEND
WHILE MOUSE(0)<>0:WEND:RETURN
iffsave:
LOCATE 11,47:PRINT "Dateiname :"
LINE(297,73)-(532,110),0,b:LINE(300,75)-(529,108),0,b
LINE(303,92)-(526,106),0,b
LOCATE 13,40:INPUT n$
IF LEN(n$)=0 THEN clrscrn
IF LEN(n$)>15 THEN n$=LEFT$(n$,15)
GOSUB okgadget
savmaus:
GOSUB click:x=MOUSE(1):y=MOUSE(2)
IF y>149 AND y<161 THEN
IF x>303 AND x<368 THEN GOTO clrscrn: REM cancel
IF x<482 AND x>526 THEN savmaus
END IF
WINDOW 3
ON ERROR GOTO saverror: REM ok
ad&=PEEKL(PEEKL(WINDOW(8)+4)+8): REM Window-Adresse
bmgr=20: REM CHUNK-
cmgr=2*3: REM Größen
bogr=200*640/8*1: REM berechnen
fogr=12+bmgr+8+cmgr+8+bogr: REM
OPEN n$ FOR OUTPUT AS #1 LEN=8192
PRINT #1,"FORM";MKL$(fogr);"ILBM";: REM FORM-Chunk
PRINT #1,"BMHD";MKL$(bmgr);: REM BMHD-Chunk
PRINT #1,MKI$(640);MKI$(200);MKL$(0);
PRINT #1,CHR$(1);CHR$(0);MKI$(0);
PRINT #1,MKI$(0);CHR$(10);CHR$(11);
PRINT #1,MKI$(640);MKI$(200);
PRINT #1,"CMAP";MKL$(cmgr);: REM CMAP-Chunk
PRINT #1,CHR$(0);CHR$(0);CHR$(0);
PRINT #1,CHR$(192);CHR$(192);CHR$(192);
PRINT #1,"BODY";MKL$(bogr);: REM BODY-Chunk
FOR y=0 TO 199
za&=ad&+80*y
FOR x=0 TO 79 STEP 4
PRINT #1,MKL$(PEEKL(za&+x));
NEXT x:PSET(1,y),0
NEXT y:LINE(1,0)-(1,199),1
CLOSE #1:GOTO clrscrn
saverror:
LOCATE 10,28:PRINT " "
LOCATE 11,28:PRINT " ACHTUNG DISK-ERROR ! "
LOCATE 12,28:PRINT " --------------------- "
LOCATE 13,28:PRINT " Maustaste drÜcken ! "
LOCATE 14,28:PRINT " "
LINE(220,70)-(442,114),1,b:LINE(217,68)-(445,116),1,b
GOSUB click: WINDOW CLOSE 3:RESUME clrscrn